/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Modele;

import java.awt.Color;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.geom.Point2D;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Zanna Bianca
 */
public class Hexagon extends Graphique {

    /**
     * @return the LONGUEURDESHEXAGONS
     */
    

    /*
     * Les Hexagons peuvent déterminer par rapport les points sur le graphique
     */
    private Polygon pol;
    private List<Hexagon> hex = new ArrayList<Hexagon>();
    private static long LONGUEURDESHEXAGONS = 0;
    private Point valCor = new Point();
    private Point2D centre;
    private static long moyenLongueur = 0;
    private Color cl = Color.GREEN;
    private Lapin lapin;

    /*
     * Les positions des hexagons
     */
    public Hexagon(int valCorX, int valCorY) {
        this.valCor.setLocation(valCorX, valCorY);
    }
    /*
     * Trouver la distance entre les hexagons pour tracer et déterminer les ponts
     */

    public static void setLONGUEURDESHEXAGONS(Hexagon hex) {
        double longueur = 0;
        List<Point> pl = hex.getPointList();
        Polygon pol = hex.getPol();

        for (int i = 0; i <= 5; i++) {
            if (i < 5) {
                longueur += Math.sqrt(Math.pow((pl.get(i + 1).x) - (pl.get(i).x), 2) + Math.pow((pl.get(i + 1).y) - (pl.get(i).y), 2));
            } else {
                longueur += Math.sqrt(Math.pow((pl.get(i).x) - (pl.get(0).x), 2) + Math.pow((pl.get(i).y) - (pl.get(0).y), 2));
            }
        }
        Hexagon.LONGUEURDESHEXAGONS = (int) (Math.round(longueur / 6) + Math.round(Math.sqrt(Math.pow((pl.get(0).x) - (pl.get(1).x), 2) + Math.pow((pl.get(0).y) - (pl.get(1).y), 2))));

    }
    public static long getLONGUEURDESHEXAGONS() {
        return Math.round(Hexagon.LONGUEURDESHEXAGONS);
    }
    

    /*
     * Déterminer la longueur moyenne de chaque distance 
     */
    /**
     * @return the pol
     */
    public Polygon getPol() {
        return pol;
    }

    /**
     * @param pol the pol to set
     */
    public void setPol(Polygon pol) {
        this.pol = pol;
    }

    /**
     * @return the hex
     */
    public List<Hexagon> getHex() {
        return this.hex;
    }

    /**
     * @return the virIndex
     */
    public Point getVirIndex() {
        return this.valCor;
    }

    /**
     * @return the centre
     */
    public Point2D getCentre() {
        return this.centre;
    }

    /**
     * @param centre the centre to set
     */
    public void setCentre() {
        this.centre = new Point((int) this.getPointList().get(3).getX() + Math.round((int) this.getTaille() / 2), (int) this.getPointList().get(3).getY());
    }

    /**
     * @return the cl
     */
    public Color getCl() {
        return this.cl;
    }

    /**
     * @param cl the cl to set
     */
    public void setCl(Color cl) {
        this.cl = cl;
    }

    @Override
    public boolean contains(int x, int y) {
        return pol.contains(new Point(x, y));
    }

    public void ajouteHexagon(Hexagon hex) {
        this.hex.add(hex);
    }

    /**
     * @return the lapin
     */
    public Lapin getLapin() {
        return this.lapin;
    }

    /**
     * @param lapin the lapin to set
     */
    public void setLapin(Lapin lapin) {
        this.lapin = lapin;
        do {
            lapin.setValCorHex(this.valCor);
        } while (lapin != null);
    }

}
